2장 클라우드 컴퓨팅 아키텍처

아키텍처의 변화

2000년대 이후 웹이용자의 폭발적인 증가로 필요한 기술들이 변하고 아키텍처가 변화 했다. 기술들에는 아키텍처, 프레임워크, 방법론, 소프트웨어 패턴 등 여러가지 것들이 포함된다.
이들 기술들은 동시 다발적으로 필요해의해 나타났다. 이전의 기술들이 서로 대체되어 없어지는 것이 아니라 환경에 의해 선호되는 기술이 있다고 생각한다. 물론 잘 사용되지 않는 기술들도 있겠다.
따라서 이 기술들을 하나도 간과 할 수 없다. 아래 나열은 같은 레벨로 나누어 놓은것은 아니다.

  • Model 1, Model 2(MVC), AOP
  • EJB, Spring
  • Xen, KVM, VMWare
  • LaaS, Saas, PaaS
  • Load Balancing, DNS Round Robtin, L4 Switch
  • Web Server, Application Server, Servlet Container
  • Component Based Development, Service Oriented Architecture
  • Scale In, Scale Out
  • REST, JSON

클라우드 서비스를 위한 아키텍처

개발자들의 역량이 상승했다(정말?). 분산 기술들도 많이 공개되어 지고 있고 무르익고 있다. 분산기술을 요구하기 시작했다.

일반화된 분산 기술

  • 애플리케이션 서버용 프레임워크
  • 다양한 프로그래밍 언어 지원
  • 분산환경을 제어할 수 있는 기술
  • 분산 스토리지

클라우드 아키텍처의 요구 사항

  • 탄력적 확장성
  • 고가용성
  • 자동화된 리소스 관리
  • 자동 복구/치료

수 많은 도구와 방법들

  • NoSQL, RDBMS, Hadoop, Server Virtualization, ...
  • Thrift, WSDL, SOAP, REST, ...
  • Application Server(Tomcat, .NET, Thrift Server, ...)
  • DATA Mapper(ORM, SQL query mapper) FileSystem Mapper, Framwork, Framework, Framework Framework.......
  • 관리용 서비스들(빌링, 모니터링, 미터링, SSO, ...)

진화

다양한 구성요소들을 한꺼번에 소화할 수 없다. 따라서 적당한 수순을 밟아 아키텍처를 진화 시켜야 할 것이다.
아래 처럼 진화시켜 보자.

  1. 웹서버기능을 수행하는 웹 애플리케이션서버 * 1 + DBMS * 1 + 기능별 모듈 * Many
  2. Facade 패턴을 이용해 서브 시스템별로 모듈을 묶음
  3. 서브 시스템별 서버 확장
  4. 서브 시스템의 용량 산정후 서비스 풀 구성. 서비스 풀은 로드밸런스를 이용해 부하 분산
  5. DBMS * Many
  6. 서비스 풀별로 Cache Layer 추가
  7. 외부 공개 API를 제공할 서비스와 보안, SLA(Service Level Agreement)서비스 수준 계약서, 요금 정책 수립
  8. 외부 공개 API를 위한 gateway 추가
  9. 클라우드 외부에 공개된 API를 이용하기 위한 gateway 추가
  10. 외부 공개 API의 버전 관리를 위한 version route 추가
  11. 만약의 트래픽 폭주를 위한 솔루션(Iaas) 활용 고려(AWS, ucloud, ...), Paas(App Engine)

오픈소스 솔루션

제시된 클라우드 아키텍처를 오픈소스로 구성할 수 있다.
앞으로 각 구성 요소들을 간단히 실습해보자.

  • 로그관리
    chunkwa, scribe
  • 클러스터 관리
    ZooKeeper
  • 애플리케이션 서버
    thrift, Avro
  • 대용량 데이터 분석
    Hadoop MapReduce
  • NoSQL
    Bigtable, Cloudata, Hbase, Cassandra, MongoDB
  • 캐시
    Memcached, Membase
  • 서버 가상화
    Xen, KVM
  • 클라우드 스토리지
    Hadoop